package com.hsc.offer;

/**
 * @author
 * @date 2025-06-18
 * @Description 9.一只青蛙一次可以跳上1级台阶，也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
 */
public class OfferTest4 {
    public static void main(String[] args) {
        System.out.println("new OfferTest4().JumpFloor(4) = " + new OfferTest4().JumpFloor(5));
    }


    public int JumpFloor(int target) {
//        System.out.println(target);
        // 如果台阶只有1级 只有一种跳法
        if (target == 1) {
            return 1;
        }
        // 如果台阶只有2级 有两种跳法
        // 第一种跳法：每次跳一级 跳两次跳到第二级
        // 第二种跳法: 每次跳两级  一次就跳到了 第二级
        if (target == 2) {
            return 2;
        }
        // 递归公式 f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)+f(n-5)+f(n-6)+...+f(3)+f(2)+f(1)
        // 我们使用i来进行控制 i++
        int sum = 0;
        for (int i = 1; i < target; i++) {
            System.out.println("i = " + i);
            System.out.println("target = " + target);
            // 当i==1 时，
            // JumpFloor(int target)=》target=5 i=1===>JumpFloor(4);
            // 调用方法 JumpFloor(4); =》target=4 i=1===>JumpFloor(3);
            // 调用方法 JumpFloor(3);=》target=3 i=1===>JumpFloor(2);
            // 调用方法JumpFloor(2); return 2
            // 结束 JumpFloor(5) 的调用  return 2
            sum += JumpFloor(target - i);
        }
        // 还有一种情况 青蛙直接从原地直接跳到 顶层
        return sum + 1;

    }
}
